#include <stdio.h>
#include <iostream>
#include <windows.h>    // <> 一般是调用标准库的头文件
#include "HeaderFile/arraypoint.h" //调用自己编写的头文件一般使用 ""
#include "HeaderFile/stringpoint.h"    //String类型指针相关方法示例
#include "HeaderFile/pointforp.h"  //指向指针的指针
#include "HeaderFile/methodpoint.h" //方法相关指针
#include "HeaderFile/MethodReturnPoint.h"//返回值为指针类型的方法
#include "HeaderFile/LinkedList.h"//创建动态链表相关

void function2();
void function1();
void function3();
void function4();
void function5();
void condition();
void pointForPoint1();
extern int iCount;//TODO 使用extern再声明一次该变量就可以访问到其他源文件中的全局变量

int main(/*int argc,char *argv[]*/){
    // function1();
    // function2();
    // function3();
    // function4();
    // function5();
//    arrayPoint1();
    // condition();
//    arrayPoint2();
//    stringPoint1();
//    stringPoint2();
//    stringPoint3();
//    pointForPoint1();
//    pointForPoint2();
    /*
      int a = 100,b = 500;
      int *p1 = &a, *p2 = &b;
      methodPoint1(p1,p2);
      printf("a为：%d,b为:%d\n", a, b);
    */
    /*
    int a = 100,b = 500;
    int *p1 = &a, *p2 = &b;
    methodPoint1(p1,p2);
    methodPoint2(p1,p2);
    printf("a指针地址为：%d,b指针地址为:%d\n", p1, p2);
    printf("a为：%d,b为:%d\n", a, b);
    printf("a指针地址为：%d,b指针地址为:%d\n", p1, p2);
     */
    /*
    int a = 9,b = 10;
    methodPoint3(a, b);//TODO 这里会涉及值得传递问题，请注意，这里与java是不同的
    printf("a= %d,b =%d", a, b);
     */
    /*
    int a = 10, b = 20, c = 30;
    methodPoint4(&a, &b, &c);
    printf("a = %d,b = %d, c = %d", a, b, c);
     */
    /*
    //冒泡排序
    int arr[] = {1, 2, 4, 5, 7, 84445, 345, 2342, 4234, 5464, 645, 453, 23, 42342, 3424, 54, 4, 353, 4534, 6, 546, 456};
    int *pre = &arr[0];
    methodPointForBubbleSort(pre,22);
    printf("函数内排序得到的值为：\n");
    for (int i = 0; i < 22; ++i) {
        printf("%6d", *(pre + i));
    }
     */
    /*
    int *pInt = per(10, 20);
    printf("长方形的周长为：%d", *pInt);
     */

    /*
    //TODO 主函数的参数可以通过Debug生成的exe文件在命令行中指出函数参数
    printf("%s\n",*argv);
    printf("%d", argc);
    */

//    Student *pStudent = createLinkedList();//创建链表



    return 0;
}

/*
    条件编译
*/
void condition(){

}

/*
    指针自减运算，指针自减的--不一定代表的是1个字节
    这里的-- 指的是指向上一个存储基本类型的地址
*/
void function5(){
    int i;
    int *p;
    printf("请输入一个数值：\n");
    scanf("%d",&i);
    p=&i;
    printf("输出p的结果为：%d\n",p);//这里将地址以十进制输出
    p--;
    printf("输出p--的结果为：%d\n",p);

}

/*
    指针自加运算,指针自加是会加上当前类所占字节数,所以直接输出指针自加的地址值不一定是加1
*/
void function4(){
    int i;
    int *p;
    printf("请输入一个数值：\n");
    scanf("%d",&i);
    p=&i;
    printf("输出p的结果为：%d\n",p);
    p++;
    printf("输出p++的结果为：%d\n",p);

}
/*
    *&的应用,注意*&与&*的区别，优先级相同，从右向左结合
*/
void function3(){
    long i;
    long *p;
    printf("请输入一个数值：\n");
    scanf("%ld",&i);
    p=&i;
    printf("输出*&i结果为：%ld\n",*&i);
    printf("输出i结果为：%ld\n",i);
    printf("输出*&i结果为：%ld\n",*p);
}

/*
    &*的应用
*/
void function2(){
    long i;
    long *p;
    printf("请输入一个数值：\n");
    scanf("%ld",&i);
    p=&i;
    printf("输出&*p结果为：%ld\n",&*p);
    printf("输出结果为：%ld\n",*p);
    printf("输出的&i的结果为:%ld\n",&i);

}

//测试
void function1(){
    int a,b;
    int *p1,*p2;
    printf("请输入：\n");
    scanf("%d,%d",&a,&b);
    p1=&a;
    p2=&b;
    printf("输出为1：%d\n",*p1);
    printf("输出为2：%d\n",*p2);
    system("pause");
}